Skip to content

Implement Florida State Supplementary Payment (SSP)#7891

Merged
PavelMakarchuk merged 16 commits intoPolicyEngine:mainfrom
hua7450:fl-ssp
Apr 22, 2026
Merged

Implement Florida State Supplementary Payment (SSP)#7891
PavelMakarchuk merged 16 commits intoPolicyEngine:mainfrom
hua7450:fl-ssp

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented Mar 26, 2026

Summary

Implements Florida's Optional State Supplementation (OSS) -- state supplement for SSI recipients in licensed residential care facilities (ALF, AFCH, MHRTF).

Closes #7890

Regulatory Authority

Program Overview

  • Administration: State-administered by FL Department of Children and Families (DCF)
  • Funding: State funds
  • Coverage: SSI recipients (and near-recipients) residing in licensed Assisted Living Facilities (ALF), Adult Family Care Homes (AFCH), or Mental Health Residential Treatment Facilities (MHRTF)

Eligibility (per FAC 65A-2.032 / .033)

Requirement Source How Modeled
Aged 65+ OR 18+ blind/disabled per Title XVI FAC 65A-2.032(1)(a)-(b) is_ssi_eligible
Must actually receive SSI (Group 1) OR have income within OSS income standard (Group 2) FAC 65A-2.033(1)-(2) ssi > 0 for Group 1; ssi_countable_income <= fl_oss_income_standard for Group 2
Florida resident FAC 65A-2.032(1)(c) defined_for = StateCode.FL
US citizen or qualified noncitizen FAC 65A-2.032(1)(d) Via is_ssi_eligible
Assets within SSI limits ($2K/$3K) FAC 65A-2.032(1)(f) Via is_ssi_eligible
Must reside in licensed ALF, AFCH, or MHRTF FAC 65A-2.032(1)(g) fl_oss_community_care_type input enum
Income exclusions follow federal SSI rules FAC 65A-2.035 Reuses ssi_countable_income

Couple Rate Gating

Couple rate applies only when all of the following hold:

  1. ssi_claim_is_joint (joint SSI claim)
  2. Both spouses pass is_ssi_eligible (resources + immigration)
  3. Both spouses reside in a qualifying OSS facility
  4. Both spouses are on the same non-NONE program track (Appendix A-12 defines couple rates per track; there is no mixed-track couple rate)

Benefit Amounts (verified against Appendix A-12 source documents)

Redesign (ALF / AFCH / MHRTF with ACS)

Period Individual Rate Couple Rate Max OSS (I) Max OSS (C)
2023-01-01 $938.40 (= $914 FBR + $24.40) $1,803.80 (= 2×$938.40 - $73) $78.40 $156.80
2024-01-01 $967.40 (= $943 FBR + $24.40) $1,861.80 (= 2×$967.40 - $73) $78.40 $156.80
2024-07-01 $967.40 $1,861.80 $184.40 $368.80
2025-01-01 $991.40 (= $967 FBR + $24.40) $1,885.80 (= 2×$991.40 - $97) $184.40 $368.80

Protected (MHRTF without ACS + 2001 "Gap" group) — in effect from 2023-01-01

Period Individual Rate Couple Rate Max OSS (I) Max OSS (C)
2023-01-01 $1,099 (= $914 FBR + $185) $2,125 (= 2×$1,099 - $73) $239 $478
2024-01-01 $1,128 (= $943 FBR + $185) $2,183 (= 2×$1,128 - $73) $239 $478
2024-07-01 $1,128 $2,183 $345 $690
2025-01-01 $1,152 (= $967 FBR + $185) $2,207 (= 2×$1,152 - $97) $345 $690

Personal Needs Allowance (PNA)

Period Amount Source
2011-01-01 to 2024-06-30 $54/person/month SSA 2011 report; 2024-06 Appendix
2024-07-01 onward $160/person/month HB 5001; 2024-06 Appendix; 2025-05 Appendix

Income Standards (FAC 65A-2.036)

Track Formula
Redesign Provider rate + $54 fixed offset
Protected Provider rate (no offset)

Couple treatment: Couple provider rate = 2 × individual rate - reduction. Couple reduction: $0 (pre-2023), $73 (2023-01-01 to 2024-12-31), $97 (2025-01-01 onward) — verified by back-calculation across both tracks and Appendix versions.

COLA: Automatic via SSI FBR + fixed offsets ($24.40 Redesign / $185 Protected).

Formula: OSS = min(max(0, provider_rate + PNA - countable_income), max_oss)

Source Discrepancy Noted

The 2025-05 Appendix A-12 shows $386.80 for the Redesign couple max OSS in the July 2024 and January 2025 columns, but the 2024-06 Appendix shows $368.80 for July 2024. $368.80 = 2 × $184.40, consistent with the 2×-individual rule that holds for every other max_oss pair in both Appendices. This PR uses $368.80 on the assumption that $386.80 in the 2025-05 Appendix is a typo.

Not Modeled (by design)

What Source Why Excluded
Must apply for all other benefits FAC 65A-2.032(1)(h) Administrative/procedural
Historical AABD recipients (Coverage Group 3) FAC 65A-2.033(3) Grandfathered since Dec 1973; recipients would be 100+ years old or have been lifetime-disabled since birth in 1973; no microdata variable identifies this population
Lost-OSS-due-to-income group (Coverage Group 4) FAC 65A-2.033(4) Transitional status; requires enrollment history not in microdata
Admission-month proration FAC 65A-2.036(6) No admission-date variable in microdata; effect bounded to a single month per claim; would require PolicyEngine-wide partial-month modeling
Third-party supplementation (up to 4× rate) F.S. 409.212 Provider-side payment, not individual benefit
Estate recovery provisions SSA 2011 report Post-death administrative process
State-specific income exclusions (F.S. 409.212(5)) FAC 65A-2.035 Mirror federal SSI exclusions, which ssi_countable_income already applies

Files

parameters/gov/states/fl/dcf/oss/
  pna.yaml
  couple_provider_rate_reduction.yaml
  redesign/
    provider_rate_offset.yaml
    income_standard_pna_offset.yaml
    max_oss/{individual,couple}.yaml
  protected/
    in_effect.yaml
    provider_rate_offset.yaml
    max_oss/{individual,couple}.yaml

variables/gov/states/fl/dcf/oss/
  fl_oss.py                      # Final payment formula
  fl_oss_eligible.py             # Eligibility (Group 1 + Group 2)
  fl_oss_community_care_type.py  # Input enum: ALF, AFCH, MHRTF, NONE
  fl_oss_living_arrangement.py   # Formula enum derived from community care type
  fl_oss_program_track.py        # Input enum: REDESIGN, PROTECTED, NONE
  fl_oss_couple_rate_applies.py  # Boolean: joint claim + both eligible + both in facility + same track
  fl_oss_provider_rate.py        # Provider rate (FBR + offset, couple formula)
  fl_oss_income_standard.py      # Income standard for Group 2 eligibility
  fl_oss_max_oss.py              # Max OSS cap by track and claim type

tests/policy/baseline/gov/states/fl/dcf/oss/
  fl_oss.yaml                    # 7 payment tests
  fl_oss_eligible.yaml           # 6 eligibility tests
  fl_oss_provider_rate.yaml      # 5 provider rate tests
  fl_oss_max_oss.yaml            # 4 max OSS tests
  fl_oss_income_standard.yaml    # 3 income standard tests
  fl_oss_program_track.yaml      # 3 program track tests
  fl_oss_living_arrangement.yaml # 4 living arrangement tests
  fl_oss_couple_rate_applies.yaml # 8 couple rate tests (incl. mismatched-track)
  integration.yaml               # 12 end-to-end tests (incl. mixed-track regression)
  edge_cases.yaml                # 28 edge case tests

Source Verification (completed)

  • Payment amounts back-calculated from both the 2024-06 and 2025-05 Appendix A-12 documents; all reference titles now annotate which columns they show
  • Eligibility logic verified against FAC 65A-2.032 / .033 (4 coverage groups; only Groups 1 and 2 modeled)
  • Income standard formula verified against FAC 65A-2.036: Redesign = provider + $54; Protected = provider (no offset)
  • SSI receipt check uses ssi > 0 per FAC 65A-2.033(1) wording "receiving SSI checks"
  • Medicaid facility branch removed: not an OSS coverage group in current FAC 65A-2
  • Historical PNA ($54 pre-Jul 2024) verified against SSA 2011 report and 2024-06 Appendix
  • Protected track backdated to Jan 2023 per 2024-06 Appendix (P2 review finding)
  • Couple rate gated on shared track (P1 review finding)
  • Admission-month proration documented as not modeled (P3 review finding)

Test plan

  • 80 FL OSS tests pass (4 living arrangement + 8 couple rate + 6 eligibility + 5 provider rate + 3 income standard + 4 max OSS + 3 program track + 7 payment + 12 integration + 28 edge cases)
  • 152 Florida-wide tests pass
  • CI passes

@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 27, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.66%. Comparing base (20705b0) to head (ccf0d87).
⚠️ Report is 14 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##             main    #7891       +/-   ##
===========================================
+ Coverage   85.36%   96.66%   +11.30%     
===========================================
  Files           3       10        +7     
  Lines          41      180      +139     
  Branches        2        4        +2     
===========================================
+ Hits           35      174      +139     
  Misses          6        6               
Flag Coverage Δ
unittests 96.66% <100.00%> (+11.30%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 and others added 5 commits March 31, 2026 14:27
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ine#7890)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix redesign/provider_rate_offset 2011 value: $78.40 → $24.40
  (was max OSS cap, not offset; SSA 2011 income limit $752.40 confirms)
- Fix redesign/max_oss/couple 2011 value: $396.80 → $156.80
  (SSA 2011 footnote b: couples treated as two individuals)
- Replace broken 404 Appendix A-12 URL in all 9 parameter files
- Update affected test expected values

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add protected/in_effect.yaml (false before 2024-07-01, true after)
to properly gate the Protected track instead of using $0 values as
sentinels. Formulas now use `if p.protected.in_effect:` to avoid
accessing Protected parameters in pre-2024 periods.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
hua7450 and others added 10 commits April 14, 2026 23:41
Replace bare ssi_claim_is_joint with fl_oss_couple_rate_applies that
checks both spouses are is_ssi_eligible AND in a qualifying facility.
Also align eligibility with FAC 65A-2.033: use ssi > 0 (actual SSI
receipt per statute) instead of uncapped_ssi > 0, and allow Medicaid
facility residents to qualify via Group 2 (income standard).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Update 404 Appendix A-12 URL in 3 variable files (2024-10 → 2025-05)
- Remove duplicate date entry in redesign/provider_rate_offset.yaml
- Remove value annotations from reference titles in max_oss files
- Fix descriptions: use allowed verbs and "this indicator" pattern
- Spell out PNA acronym in label

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Medicaid facility: Group 1 only (ssi > 0), no Group 2 path — FAC
  65A-2.036 defines no income standard for Medicaid facility residents
- Simplify fl_oss_couple_rate_applies: rely on ssi_claim_is_joint for
  Title XIX separation (see PolicyEngine#8003) instead of inline same_category check
- Add integration Cases 12-14: Medicaid facility negative path, couple
  with SSI equal-split, and earnings with SSI exclusions
- Fix couple_rate_applies Case 6: mixed ALF/Medicaid simulates fixed
  federal behavior per 20 CFR 416.1149

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts:
#	policyengine_us/parameters/gov/household/household_state_benefits.yaml
#	policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py
FAC 65A-2.032/.033/.036 (current) cover only ALF, AFCH, and MHRTF.
Medicaid facility is not an OSS coverage group. The $5/$10 supplement
in the 2011 SSA report reflects an older FL program structure that has
since been restructured; Medicaid institutional PNA is administered
separately from OSS.

Also: standardize Appendix A-12 URLs to the 2025-05 version; mark
FL OSS as complete in programs.yaml with variable: fl_oss.
Couple rate gating (P1):
- fl_oss_couple_rate_applies now requires both spouses on the same
  non-NONE program track. Appendix A-12 defines couple rates separately
  for Redesign and Protected; there is no mixed-track couple rate.
- Added integration Case 12 (mixed-track MHRTF couple) that pins
  provider rate, max OSS, and fl_oss to individual-rate values; locks
  down the original bug directly.

Protected track backdating (P2):
- The 2024-06 Appendix A-12 shows Protected Program Standards columns
  for Jan 2023 and Jan 2024, proving Protected took effect before the
  previously modeled Jul 2024 date.
- protected/in_effect.yaml: 2024-07-01 -> 2023-01-01.
- protected/provider_rate_offset.yaml: 2024-07-01 -> 2023-01-01 ($185).
- protected/max_oss: added 2023-01-01 values ($239 I, $478 C).
- couple_provider_rate_reduction.yaml: 2024-07-01 -> 2023-01-01 ($73).
- Redesign max_oss couple corrected from $386.80 to $368.80 for
  2024-07-01 (matches 2024-06 Appendix and the 2x-individual rule
  that holds for every other max_oss pair in both Appendices;
  $386.80 in the 2025-05 Appendix appears to be a typo).
- Every reference annotation now specifies which column / value each
  source document shows, so clicking each link lands on a PDF where
  the cited number is visibly present.
- Tests updated: edge_cases Cases 8, 12, 13, 20, 28; fl_oss_max_oss
  Case 3; integration Cases 2 and 10.

All 80 FL OSS tests pass.
@hua7450 hua7450 marked this pull request as ready for review April 22, 2026 15:40
Add a comment block above fl_oss_eligible explaining that OSS-eligible
persons are always classified as OWN_HOUSEHOLD in
ssi_federal_living_arrangement because none of the three reduction
triggers (MEDICAL_TREATMENT_FACILITY, CHILD_IN_PARENTAL_HOUSEHOLD,
ANOTHER_PERSONS_HOUSEHOLD) fires for a legitimate ALF/AFCH/MHRTF
resident. The formula deliberately does not cross-check — FAC 65A-2
gates eligibility on facility type, not on SSI code — so inconsistent
inputs are treated as user error.
@hua7450 hua7450 requested a review from PavelMakarchuk April 22, 2026 17:16
Copy link
Copy Markdown
Collaborator

@PavelMakarchuk PavelMakarchuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exceptional PR. Rigorous research against primary sources verified:

  • FAC 65A-2.032/.033/.035/.036 and F.S. 409.212 (regulatory basis) ✓
  • Redesign offset $24.40, Protected offset $185 back-calculated from Appendix A-12 ✓
  • Couple reduction $0 → $73 → $97 back-calculated and cited ✓
  • PNA $54 → $160 (per HB 5001) verified against SSA 2011 and both Appendix versions ✓
  • Coverage Group 1 (SSI recipients) and Group 2 (within income standard) modeled; Groups 3 and 4 appropriately deferred with documented rationale
  • Couple rate gating on joint claim + both SSI-eligible + both in facility + same non-NONE track (mixed tracks correctly get no couple rate)
  • Honest disclosure of the $386.80 vs $368.80 discrepancy in the 2025-05 Appendix; back-calculation supports the $368.80 choice
  • Excellent doc-comment in fl_oss_eligible.py explaining the SSI living-arrangement cross-check rationale

Test coverage (80 OSS + 28 edge cases) is thorough, including a mismatched-track regression case and age boundary tests.

One of the most meticulously-researched state program PRs I've reviewed. Thanks for the detailed back-calculation notes and explicit assumption documentation.

@PavelMakarchuk PavelMakarchuk merged commit 2c2afe1 into PolicyEngine:main Apr 22, 2026
24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Florida State Supplementary Payment (SSP)

2 participants